
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean
@RequestScoped
public class ProdutoMB {

    private Produto produto;
    private Connection con;
    private PreparedStatement pstm;
    private List<Produto> produtos;

    public ProdutoMB() throws SQLException {

        produto = new Produto();
        DriverManager.registerDriver(new org.postgresql.Driver());
        con = DriverManager.getConnection(
                "jdbc:postgresql://localhost:5433/estoque",
                "postgres",
                "postgres");
        produtos = listaProduto();

    }

    public List<Produto> getProdutos() {
        return this.produtos;
    }

    public void setProdutos(List<Produto> produtos) {
        this.produtos = produtos;
    }

    public Produto getProduto() {
        return produto;
    }

    public void setProduto(Produto produto) {
        this.produto = produto;
    }

    public List<Produto> listaProduto() throws SQLException {
        produtos = new ArrayList<Produto>();
        pstm = con.prepareStatement("select * from produtos");
        ResultSet rs;
        rs = pstm.executeQuery();
        while (rs.next()) {
            produtos.add(new Produto(
                    rs.getInt("id"),
                    rs.getInt("quantidade"),
                    rs.getInt("minimo"),
                    rs.getString("nome"),
                    rs.getFloat("preco")
            )
            );
        }
        pstm.close();
        return produtos;
    }

    public void salvar() throws SQLException {
        pstm = con.prepareStatement(
                "insert into produtos(id, nome, quantidade , minimo , preco) " + "values (?, ?, ?,?,?)");
        pstm.setInt(1, produto.getId());
        pstm.setString(2, produto.getNome());
        pstm.setInt(3, produto.getQuantidade());
        pstm.setInt(4, produto.getMinimo());
        pstm.setFloat(5, produto.getPreco());

        pstm.executeUpdate();
        pstm.close();
        produtos = this.listaProduto();
    }

    public void pesquisar() throws SQLException {
        pstm = con.prepareStatement("select * from produtos where id = ?");
        pstm.setInt(1, produto.getId());
        ResultSet rs;
        rs = pstm.executeQuery();
        if (rs.next()) {
            produto.setNome(rs.getString("nome"));
            produto.setQuantidade(rs.getInt("quantidade"));
            produto.setMinimo(rs.getInt("minimo"));
            produto.setPreco(rs.getFloat("preco"));

        }
        con.close();
    }

    public void alterar() throws SQLException {
        pstm = con.prepareStatement(
                "update produtos set nome = ?, quantidade = ? , minimo = ? , preco = ? where id = ?");
        pstm.setString(1, produto.getNome());
        pstm.setInt(2, produto.getQuantidade());
        pstm.setInt(3, produto.getMinimo());
        pstm.setFloat(4, produto.getPreco());
        pstm.setInt(5, produto.getId());
        pstm.executeUpdate();
        pstm.close();
        produtos = this.listaProduto();
    }

    public void excluir() throws SQLException {
        pstm = con.prepareStatement("delete from produtos where id = ?");
        pstm.setInt(1, produto.getId());
        pstm.executeUpdate();
        pstm.close();
        this.novo();
        produtos = this.listaProduto();
    }

    public void novo() {
        produto = new Produto();
    }

}
